একটি Recursive Function হল এমন একটি ফাংশন যা নিজেই নিজেকে কল করে। এটি সাধারণত তখন ব্যবহৃত হয়, যখন একটি সমস্যা ছোট অংশে বিভক্ত করে সমাধান করা যায় এবং প্রতিটি অংশের সমাধান একে অপরের উপর নির্ভর করে।
PL/SQL-এ recursive function তৈরি করার সময় এটি খুবই গুরুত্বপূর্ণ যে একটি base case (বেস কেস) বা terminating condition থাকা উচিত, যা নিশ্চিত করবে যে রিকার্সন সীমিত থাকবে এবং ইনফিনিট লুপ তৈরি করবে না।
একটি recursive function দুটি অংশে বিভক্ত:
FUNCTION function_name (parameter) RETURN datatype IS
BEGIN
-- Base case
IF (condition) THEN
RETURN value;
ELSE
-- Recursive call
RETURN function_name(parameter);
END IF;
END;
ফ্যাক্টোরিয়াল একটি ক্লাসিক উদাহরণ যেখানে রিকার্সন ব্যবহৃত হয়। একটি সংখ্যা n
এর ফ্যাক্টোরিয়াল হল n * (n-1) * (n-2) * ... * 1
। এই ফাংশনটি নিজেকে কল করে ছোট ছোট অংশে বিভক্ত হবে, যতক্ষণ না বেস কেস (যেমন n = 1
) পৌঁছায়।
CREATE OR REPLACE FUNCTION factorial(n IN NUMBER) RETURN NUMBER IS
BEGIN
-- Base Case: If n is 1, return 1
IF n = 1 THEN
RETURN 1;
ELSE
-- Recursive Case: n * factorial(n-1)
RETURN n * factorial(n-1);
END IF;
END;
DECLARE
v_result NUMBER;
BEGIN
v_result := factorial(5); -- Calling the recursive function
DBMS_OUTPUT.PUT_LINE('Factorial of 5 is: ' || v_result);
END;
Output:
Factorial of 5 is: 120
এখানে, factorial(5)
প্রথমে 5 * factorial(4)
কল করে, এরপর factorial(4)
কল হয় 4 * factorial(3)
কল করার জন্য, এবং এইভাবে এটি চলতে থাকে যতক্ষণ না n = 1
(বেস কেস) হয়, যেখানে এটি থেমে গিয়ে 1
ফেরত দেয়।
ফিবোনাচ্চি সিরিজ একটি জনপ্রিয় গাণিতিক সিরিজ যেখানে প্রতিটি সংখ্যা আগের দুইটি সংখ্যার যোগফল। উদাহরণস্বরূপ: 0, 1, 1, 2, 3, 5, 8, 13, ...
ফিবোনাচ্চি সিরিজ গণনার জন্য একটি recursive function ব্যবহার করা যেতে পারে।
CREATE OR REPLACE FUNCTION fibonacci(n IN NUMBER) RETURN NUMBER IS
BEGIN
-- Base Case: Fibonacci(0) = 0, Fibonacci(1) = 1
IF n = 0 THEN
RETURN 0;
ELSIF n = 1 THEN
RETURN 1;
ELSE
-- Recursive Case: Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)
RETURN fibonacci(n-1) + fibonacci(n-2);
END IF;
END;
DECLARE
v_result NUMBER;
BEGIN
v_result := fibonacci(6); -- Calling the recursive function
DBMS_OUTPUT.PUT_LINE('Fibonacci number at position 6 is: ' || v_result);
END;
Output:
Fibonacci number at position 6 is: 8
এখানে, fibonacci(6)
কল করলে এটি প্রথমে fibonacci(5) + fibonacci(4)
হিসাব করবে, এবং এইভাবে ছোট ছোট সাব-সমস্যাগুলোর সমাধান করবে।
Read more